package com.naotebuk.dao;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import com.naotebuk.entity.Usuario;

public class UsuarioDAO {
	
	// public methods
	public static boolean save(Usuario usuario) {
		try {
			if (usuario.getIdUsuario() == 0) {
				UsuarioDAO.insert(usuario);
				UsuarioDAO.updateSenha(usuario);
			} else UsuarioDAO.update(usuario);
			return true;
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		}
	}
	public static boolean insert(Usuario usuario) throws SQLException {
		String sql = " INSERT INTO USUARIO (" +
				" NOME," +
				" LOGIN," +
				" MATRICULA," +
				" EMAIL," +
				" CARGO )" +
				" VALUES (?,?,?,?,?) ";
		Connection conn = null;
		try {
			conn = DaoFactory.getConnection();
			QueryRunner run = new QueryRunner();
			run.update(
					conn, 
					sql, 
					usuario.getNome(),
					usuario.getLogin(),
					usuario.getMatricula(),
					usuario.geteMail(),
					usuario.getCargo()
			);
			return true;
		} finally {
			conn.close();
		}
	}
	public static boolean update(Usuario usuario) throws SQLException {
		String sql = " UPDATE USUARIO SET " +
				" NOME = ?," +
				" LOGIN = ? ," +
				" MATRICULA = ?," +
				" EMAIL = ?," +
				" CARGO = ? " +
				" WHERE IDUSUARIO = ? ";
		Connection conn = null;
		try {
			conn = DaoFactory.getConnection();
			QueryRunner run = new QueryRunner();
			run.update(
					conn, 
					sql, 
					usuario.getNome(),
					usuario.getLogin(),
					usuario.getMatricula(),
					usuario.geteMail(),
					usuario.getCargo(),
					usuario.getIdUsuario()
			);
			return true;
		} finally {
			conn.close();
		}
	}
	public static boolean updateSenha(Usuario usuario) throws SQLException {
		String sql = " UPDATE USUARIO SET " +
					" SENHA = MD5(?) " +
					" WHERE LOGIN = ? ";
		Connection conn = null;
		try {
			conn = DaoFactory.getConnection();
			QueryRunner run = new QueryRunner();
			run.update(
					conn, 
					sql, 
					usuario.getSenha(),
					usuario.getLogin()
			);
			return true;
		} finally {
			conn.close();
		}
	}
	public static boolean delete(Usuario usuario) throws SQLException {
		String sql = " DELETE FROM USUARIO " +
					" WHERE IDUSUARIO = ? ";
		Connection conn = null;
		try {
			conn = DaoFactory.getConnection();
			QueryRunner run = new QueryRunner();
			run.update(
					conn, 
					sql, 
					usuario.getIdUsuario()
			);
			return true;
		} finally {
			conn.close();
		}
	}
	public static Usuario getUsuario(String login, String senha) throws SQLException {
		String sql = " SELECT * " + 
				 " FROM USUARIO " + 
				 " WHERE USUARIO.LOGIN = ?" + 
				 " AND SENHA = MD5(?)";
		Connection conn = null;
		try {
			conn = DaoFactory.getConnection();
			QueryRunner run = new QueryRunner();
			ResultSetHandler<Usuario> h = new BeanHandler<Usuario>(Usuario.class);
			return run.query(conn, sql, h, login, senha); 
		} finally {
			conn.close();
		}
	}
	public static List<Usuario> getUsuarios() throws SQLException {
		String sql = " SELECT * " + 
				 " FROM USUARIO ";
		Connection conn = null;
		try {
			conn = DaoFactory.getConnection();
			QueryRunner run = new QueryRunner();
			ResultSetHandler<List<Usuario>> h = new BeanListHandler<Usuario>(Usuario.class);
			return run.query(conn, sql, h); 
		} finally {
			conn.close();
		}
	}
}
